
import aei.AeRegistry

import demographic.*
import demographic.contact.*
import demographic.party.*
import demographic.identity.*
import demographic.role.*
import hce.core.support.identification.*

import hce.HceService

import tablasMaestras.*

class BootStrap {

    def hceService
    
    def init = { servletContext ->
     
        println ""
        println "======= +++++++++ ======="
        println "======= Bootstrap ======="
        println "======= +++++++++ ======="
        println ""
     
        println " - START: Carga tablas maestras"
        
        // saco para acelerar la carga
        /*
        println "   - CIE 10..."
        def codigos = Cie10Trauma.getCodigos()
        codigos.each { codigo ->
            if (!codigo.save()) println codigo.errors
        }
        */
        
        println "   - OpenEHR Concepts..."
        def oehr_concepts = OpenEHRConcept.getConcepts()
        oehr_concepts.each { concept ->
            if (!concept.save()) println concept.errors
        }
        
        println "   - Tipos de identificadores..."
        def identificadores = TipoIdentificador.getTipos()
        identificadores.each { id ->
            if (!id.save()) println id.errors
        }
        
        println "   - Tipos de evento..."
        def eventos = TipoEvento.getTipos()
        eventos.each { evento ->
            if (!evento.save()) println evento.errors
        }
        
        println "   - Empresas emergencia movil..."
        def emergencias = EmergenciaMovil.getEmergencias()
        emergencias.each { emergencia ->
            if (!emergencia.save()) println emergencia.errors
        }
        
        println "   - Departamentos UY..."
        def departamentos = DepartamentoUY.getDepartamentos()
        departamentos.each { dpto ->
            if (!dpto.save()) println dpto.errors
        }
        
        println " - END: Carga tablas maestras"
        
        // TODO: no crear si ya existen
     
        // PACS del HMaciel
        AeRegistry pacsMaciel = new AeRegistry(
                                    "remoteAETitle":"DCM4CHEE",
                                    "remoteIP":"192.168.118.16",
                                    "remotePort":11112,
                                    "remoteWADOPort":8080,
                                    "localAETitle":"QRSCUCHE",
                                    "localIP":"192.168.118.28",
                                    "localPort":44445,
                                    "description":"PACS del Hospital Maciel")
        
        if (!pacsMaciel.save()) println "1: " + pacsMaciel.errors
        
        // ----------------------------------------------------------------------------
        
        // PACS local Clear Canvas
        AeRegistry ccServer= new AeRegistry(
                                    "remoteAETitle":"SERVERAE",
                                    "remoteIP":"localhost",
                                    "remotePort":33333,
                                    "remoteWADOPort":1000,
                                    "remoteWADOPath":"wado/SERVERAE",
                                    "localAETitle":"QRSCUCHE",
                                    "localIP":"192.168.118.28",
                                    "localPort":44445,
                                    "description":"ClearCanvas Server local")
        
        if (!ccServer.save()) println "2: " + ccServer.errors
        
        // ----------------------------------------------------------------------------

        // PACS COMEPA
        AeRegistry comepa = new AeRegistry(
                                    "remoteAETitle":"SM_COMEPA",
                                    "remoteIP":"172.28.14.21",
                                    "remotePort":4444,
                                    "remoteWADOPort":8080,
                                    //"remoteWADOPath":"wado/SERVERAE",
                                    "localAETitle":"QRSCUCHE",
                                    "localIP":"192.168.118.28",
                                    "localPort":44445,
                                    "description":"PACS de COMEPA")
        
        if (!comepa.save()) println "3: " + comepa.errors
        
        // ----------------------------------------------------------------------------
        
        println " - Creacion de pacientes de prueba"
        
         def paciente = new Person()
         //paciente.addToIds( new UIDBasedID(root:'2.16.840.1.113883.2.14.2.1', value:'1234567') )
         //paciente.addToIds( new UIDBasedID(root:'2.16.840.1.113883.2.14.1.1.1.3.1.5.1', value:'6677') )
         paciente.addToIds( new UIDBasedID(value:'2.16.840.1.113883.2.14.2.1::1234567') )
         paciente.addToIds( new UIDBasedID(value:'2.16.840.1.113883.2.14.1.1.1.3.1.5.1::6677') )
         paciente.addToIdentities( new PersonName(primerNombre:'Pablo', primerApellido:'Pazos') )
         paciente.fechaNacimiento = new Date(81, 9, 24) // 24/10/1981
         paciente.type = "Persona" // FIXME: el type no se setea solo con el nombre de la clase? (Person)
         paciente.sexo = "M"
         if (!paciente.save()) println paciente.errors
         
         def pac2 = new Person()
         //pac2.addToIds( new UIDBasedID(root:'2.16.840.1.113883.2.14.2.4', value:'2345678') )
         //pac2.addToIds( new UIDBasedID(root:'2.16.840.1.113883.2.14.1.1.1.3.1.5.1', value:'3366') )
         pac2.addToIds( new UIDBasedID(value:'2.16.840.1.113883.2.14.2.4::2345678') )
         pac2.addToIds( new UIDBasedID(value:'2.16.840.1.113883.2.14.1.1.1.3.1.5.1::3366') )
         pac2.addToIdentities( new PersonName(primerNombre:'Leandro', primerApellido:'Carrasco') )
         pac2.fechaNacimiento = new Date(82, 10, 25)
         pac2.type = "Persona"
         pac2.sexo = "M"
         if (!pac2.save()) println pac2.errors
         
         def persona3 = new Person()
         //pac3.addToIds( new UIDBasedID(root:'2.16.840.1.113883.4.330.858', value:'6667778') )
         //pac3.addToIds( new UIDBasedID(root:'2.16.840.1.113883.2.14.1.1.1.3.1.5.1', value:'444') )
         persona3.addToIds( new UIDBasedID(value:'2.16.840.1.113883.4.330.858::6667778') )
         persona3.addToIds( new UIDBasedID(value:'2.16.840.1.113883.2.14.1.1.1.3.1.5.1::444') )
         persona3.addToIdentities( new PersonName(primerNombre:'Marta', primerApellido:'Stewart') )
         persona3.fechaNacimiento = new Date(83, 11, 26)
         persona3.type = "Persona"
         persona3.sexo = "F"
         if (!persona3.save()) println persona3.errors
         
         def persona4 = new Person()
         persona4.addToIds( new UIDBasedID(value:'2.16.840.1.113883.2.14.2.1::1234888') )
         persona4.addToIds( new UIDBasedID(value:'2.16.840.1.113883.2.14.1.1.1.3.1.5.1::44556') )
         persona4.addToIdentities( new PersonName(primerNombre:'Pablo', primerApellido:'Cardozo') )
         persona4.fechaNacimiento = new Date(85, 9, 24) // 24/10/1981
         persona4.type = "Persona"
         persona4.sexo = "M"
         if (!persona4.save()) println persona4.errors
        
         def persona5 = new Person()
         persona5.addToIds( new UIDBasedID(value:'2.16.840.1.113883.4.330.858::45687543') )
         persona5.addToIds( new UIDBasedID(value:'2.16.840.1.113883.2.14.1.1.1.3.1.5.1::2233445') )
         persona5.addToIdentities( new PersonName(primerNombre:'Marcos', primerApellido:'Carisma') )
         persona5.fechaNacimiento = new Date(80, 11, 26)
         persona5.type = "Persona"
         persona5.sexo = "M"
         if (!persona5.save()) println persona5.errors
         
         // Paciente con estudios imagenologicos en el CCServer local
         def persona6 = new Person()
         persona6.addToIds( new UIDBasedID(value:'2.16.840.1.113883.4.330.666::2178309') ) // id en el CCServer
         persona6.addToIdentities( new PersonName(primerNombre:'CT', primerApellido:'Mister') )
         persona6.type = "Persona"         
         if (!persona6.save()) println persona6.errors
         
         // ROLES
         def role1 = new Role(timeValidityFrom:new Date(), type:Role.PACIENTE, performer:paciente)
         if (!role1.save())
             println role1.errors
             
         def role2 = new Role(timeValidityFrom:new Date(), type:Role.PACIENTE, performer:pac2)
         if (!role2.save())
             println role2.errors
             
         def role3 = new Role(timeValidityFrom:new Date(), type:Role.PACIENTE, performer:persona4)
         if (!role3.save())
             println role3.errors
             
         def role4 = new Role(timeValidityFrom:new Date(), type:Role.PACIENTE, performer:persona5)
         if (!role4.save())
             println role4.errors
             
         def role5 = new Role(timeValidityFrom:new Date(), type:Role.PACIENTE, performer:persona6)
         if (!role5.save())
             println role5.errors
         
         def role6 = new Role(timeValidityFrom:new Date(), type:Role.MEDICO, performer:persona3) 
         if (!role6.save())
             println role6.errors
        
        // /Creacion de pacientes
        
        println " - Creacion de episodio de prueba"
        
        def composition = hceService.createComposition( '2010-01-08', 'El paciente ingresa con dolor en el tobillo' )
        if (!composition.save())
        {
            println "Error: " + composition.errors
        }
        
        // /Creacion de episodio
        
        println ""
        println "======= +++++++++ ======="
        println "======= /Bootstrap ======="
        println "======= +++++++++ ======="
        println ""
        
     }
     def destroy = {
     }
} 